package com.skivingcloud.admin.logutils;

import org.springframework.stereotype.Component;

/**
 * 自定义函数的默认实现，增加一层是为了屏蔽底层与上层直接接触
 * @author hushouquan
 */
@Component
public class DefaultFunctionServiceImpl implements FunctionService{
    private final CustomFunctionFactory customFunctionFactory;
    
    public DefaultFunctionServiceImpl(CustomFunctionFactory customFunctionFactory) {
        this.customFunctionFactory = customFunctionFactory;
    }
    /**
     * 执行函数
     *
     * @param functionName 函数名
     * @param value        参数
     * @return 执行结果
     */
    @Override
    public String apply(String functionName, Object value){
        CustomFunction function = customFunctionFactory.getFunction(functionName);
        if (function == null) {
            return value.toString();
        }
        return function.apply(value);
    }
    
    /**
     * 是否在拦截的方法执行前执行
     *
     * @param functionName 函数名
     * @return 是否
     */
    @Override
    public boolean executeBefore(String functionName){
        CustomFunction function = customFunctionFactory.getFunction(functionName);
        return function != null;
    }
}
